// File: jmcomic-core/src/main/java/dev/jukomu/jmcomic/downloader/DownloadCallback.java
package dev.jukomu.jmcomic.downloader;

import dev.jukomu.jmcomic.config.JmModuleConfig;
import dev.jukomu.jmcomic.entity.JmAlbumDetail;
import dev.jukomu.jmcomic.entity.JmImageDetail;
import dev.jukomu.jmcomic.entity.JmPhotoDetail;

/**
 * 对应Python的DownloadCallback，定义了下载过程中的回调接口。
 */
public interface DownloadCallback {

    /**
     * 在处理本子（Album）之前调用。
     *
     * @param album 本子详情对象。
     */
    default void beforeAlbum(JmAlbumDetail album) {
        JmModuleConfig.jmLog("album.before", String.format(
                "本子获取成功: [%s], 作者: [%s], 章节数: [%d], 总页数: [%d], 标题: [%s], 关键词: %s",
                album.getId(), album.getAuthor(), album.size(), album.getPageCount(), album.getName(), album.getTags()
        ));
    }

    /**
     * 在处理完本子（Album）之后调用。
     *
     * @param album 本子详情对象。
     */
    default void afterAlbum(JmAlbumDetail album) {
        JmModuleConfig.jmLog("album.after", "本子下载完成: [" + album.getId() + "]");
    }

    /**
     * 在处理章节（Photo）之前调用。
     *
     * @param photo 章节详情对象。
     */
    default void beforePhoto(JmPhotoDetail photo) {
        JmModuleConfig.jmLog("photo.before", String.format(
                "开始下载章节: %s (%s[%d/%d]), 标题: [%s], 图片数为[%d]",
                photo.getId(), photo.getAlbumId(), photo.getAlbumIndex(), photo.getFromAlbum().size(), photo.getName(), photo.size()
        ));
    }

    /**
     * 在处理完章节（Photo）之后调用。
     *
     * @param photo 章节详情对象。
     */
    default void afterPhoto(JmPhotoDetail photo) {
        JmModuleConfig.jmLog("photo.after", String.format(
                "章节下载完成: [%s] (%s[%d/%d])",
                photo.getId(), photo.getAlbumId(), photo.getAlbumIndex(), photo.getFromAlbum().size()
        ));
    }

    /**
     * 在处理图片（Image）之前调用。
     *
     * @param image       图片详情对象。
     * @param imgSavePath 图片保存路径。
     */
    default void beforeImage(JmImageDetail image, String imgSavePath) {
        if (image.isExists()) {
            JmModuleConfig.jmLog("image.before", "图片已存在: " + image.getTag() + " ← [" + imgSavePath + "]");
        } else {
            JmModuleConfig.jmLog("image.before", "图片准备下载: " + image.getTag() + ", [" + image.getImgUrl() + "] → [" + imgSavePath + "]");
        }
    }

    /**
     * 在处理完图片（Image）之后调用。
     *
     * @param image       图片详情对象。
     * @param imgSavePath 图片保存路径。
     */
    default void afterImage(JmImageDetail image, String imgSavePath) {
        JmModuleConfig.jmLog("image.after", "图片下载完成: " + image.getTag() + ", [" + image.getImgUrl() + "] → [" + imgSavePath + "]");
    }
}